package primalgorithms.string;

public class _08CountAndSay {
    public static String countAndSay(int n) {
        return solveStr(n);
    }
    //*递归方法，以后再来看看吧
    private static String solveStr(int n) {
        //递归出口
        if(n == 1){
            return "1";
        }
        // 假设我们获得上一次的结果为 s1 = 112213
        String sPre = solveStr(n - 1);
        StringBuilder res = new StringBuilder();
        // 对sPre遍历处理获取值
        char local = sPre.charAt(0);
        int count = 0;
        for (int i = 0;i < sPre.length();i++){
            if(sPre.charAt(i) == local){
                count++;
            }else {
                //此时说明该字符已经不等于第一个字符了
                //后一个字符串的第一位是“个数”
                res.append(count);
                res.append(local);
                //注意此处的count应该是1了
                //因为执行完以下代码，i++后是从新的目标字符的第二位开始判断，如果if成立，则count=2.如果不成立，count=1
                count = 1;
                local = sPre.charAt(i);
            }
        }
        //加上最后没有来得及追加的元素
        res.append(count);
        res.append(local);
        return res.toString();
    }
}
